﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace TangoFamilyAndGuide.Site
{
    public partial class FestivalModificar : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Funciones.SessionTimeOut(Session))
                {
                    Response.Redirect("~/SessionTimeout.aspx");
                }
                else
                {
                    Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                    List<Entidades.Permiso> permisoHabilitado = sesion.Usuario.Permisos.FindAll(delegate(Entidades.Permiso p)
                    {
                        return p.TipoPermiso.Id == "OperFestival" && p.Estado == "Active";
                    });
                    if (permisoHabilitado.Count == 0)
                    {
                        Response.Redirect("~/Home.aspx");
                    }

                    MonedaEntradaDropDownList.DataSource = Entidades.CodigosMoneda.CodigoMoneda.ListaReducidaMasSinInformar();
                    
                    Entidades.Festival festival = (Entidades.Festival)Session["Festival"];

                    IdFestivalLabel.Text = festival.Id.ToString();
                    EstadoActualLabel.Text = "Current status: " + festival.Estado;

                    sesion.Usuario.Id = festival.Usuario.Id;
                    NombreTextBox.Text = festival.Nombre;
                    DescripcionTextBox.Text = festival.Descripcion;
                    Domicilio.Direccion = festival.Direccion;
                    Domicilio.Pais = festival.Pais;
                    Domicilio.Provincia = festival.Provincia;
                    Domicilio.Localidad = festival.Localidad;
                    Domicilio.CodPost = festival.CodPost;
                    Domicilio.Telefono = festival.Telefono;

                    MonedaEntradaDropDownList.SelectedValue = festival.MonedaEntrada;
                    if (festival.MonedaEntrada == string.Empty && festival.PrecioEntrada == 0)
                    {
                        PrecioEntradaTextBox.Text = "";
                    }
                    else
                    {
                        PrecioEntradaTextBox.Text = festival.PrecioEntrada.ToString();
                    }
                    ComentarioEntradaTextBox.Text = festival.ComentarioPrecioEntrada;

                    Contacto.Nombre = festival.Contacto.Nombre;
                    Contacto.Email = festival.Contacto.Email;
                    Contacto.Telefono = festival.Contacto.Telefono;

                    EmailTextBox.Text = festival.Email;
                    WebSiteTextBox.Text = festival.WebSite;
                    ComentariosTextBox.Text = festival.Comentarios;
                    
                    FacebookTextBox.Text = festival.Facebook;
                    GoogleMapTextBox.Text = festival.GoogleMap;
                    if (festival.FechaRango.FechaDesde == Convert.ToDateTime("01/01/1900"))
                    {
                        FechaDesdeTextBox.Text = "";
                    }
                    else
                    {
                        FechaDesdeTextBox.Text = festival.FechaRango.FechaDesde.ToString("dd/MM/yyyy");
                    }
                    if (festival.FechaRango.FechaHasta == Convert.ToDateTime("01/01/1900"))
                    {
                        FechaHastaTextBox.Text = "";
                    }
                    else
                    {
                        FechaHastaTextBox.Text = festival.FechaRango.FechaHasta.ToString("dd/MM/yyyy");
                    }
                    BailarinesTextBox.Text = festival.Bailarines;
                    ViewState["horarios"] = festival.Horarios;
                    gvEG.DataSource = festival.Horarios;

                    NombreTextBox.Focus();
                    DataBind();
                }
            }
        }
        protected void AceptarButton_Click(object sender, EventArgs e)
        {
            if (Funciones.SessionTimeOut(Session))
            {
                Response.Redirect("~/SessionTimeout.aspx");
            }
            else
            {
                Entidades.Sesion sesion = (Entidades.Sesion)Session["Sesion"];
                Entidades.Festival festivalDesde = (Entidades.Festival)Session["Festival"];
                Entidades.Festival festivalHasta = RN.Festival.ObtenerCopia(festivalDesde);
                try
                {
                    festivalHasta.Id = Convert.ToInt32(IdFestivalLabel.Text);
                    festivalHasta.Usuario.Id = sesion.Usuario.Id;
                    festivalHasta.Nombre = NombreTextBox.Text;
                    festivalHasta.Descripcion = DescripcionTextBox.Text;
                    festivalHasta.Direccion = Domicilio.Direccion;
                    festivalHasta.Pais = Domicilio.Pais;
                    festivalHasta.Provincia = Domicilio.Provincia;
                    festivalHasta.Localidad = Domicilio.Localidad;
                    festivalHasta.CodPost = Domicilio.CodPost;
                    festivalHasta.Telefono = Domicilio.Telefono;

                    festivalHasta.MonedaEntrada = MonedaEntradaDropDownList.SelectedValue;
                    if (PrecioEntradaTextBox.Text != string.Empty)
                    {
                        festivalHasta.PrecioEntrada = Convert.ToDecimal(PrecioEntradaTextBox.Text);
                    }
                    festivalHasta.ComentarioPrecioEntrada = ComentarioEntradaTextBox.Text;

                    festivalHasta.Contacto.Nombre = Contacto.Nombre;
                    festivalHasta.Contacto.Email = Contacto.Email;
                    festivalHasta.Contacto.Telefono = Contacto.Telefono;
                    festivalHasta.Email = EmailTextBox.Text;
                    festivalHasta.WebSite = WebSiteTextBox.Text;

                    festivalHasta.Facebook = FacebookTextBox.Text;
                    festivalHasta.GoogleMap = GoogleMapTextBox.Text;
                    festivalHasta.Bailarines = BailarinesTextBox.Text;
                    if (FechaDesdeTextBox.Text != "")
                    {
                        festivalHasta.FechaRango.FechaDesde = Convert.ToDateTime(FechaDesdeTextBox.Text);
                    }
                    else
                    {
                        festivalHasta.FechaRango.FechaDesde = Convert.ToDateTime("01/01/1900");
                    }
                    if (FechaHastaTextBox.Text != "")
                    {
                        festivalHasta.FechaRango.FechaHasta = Convert.ToDateTime(FechaHastaTextBox.Text);
                    }
                    else
                    {
                        festivalHasta.FechaRango.FechaHasta = Convert.ToDateTime("01/01/1900");
                    }
                    festivalHasta.Horarios = (List<Entidades.HorarioFecha>)ViewState["horarios"];

                    festivalHasta.Comentarios = ComentariosTextBox.Text;
                    RN.Festival.Modificar(festivalDesde, festivalHasta, sesion);

                    NombreTextBox.Enabled = false;
                    DescripcionTextBox.Enabled = false;
                    Domicilio.Enabled = false;
                    Contacto.Enabled = false;
                    MonedaEntradaDropDownList.Enabled = false;
                    PrecioEntradaTextBox.Enabled = false;
                    ComentarioEntradaTextBox.Enabled = false;
                    EmailTextBox.Enabled = false;
                    WebSiteTextBox.Enabled = false;
                    FacebookTextBox.Enabled = false;
                    GoogleMapTextBox.Enabled = false;
                    BailarinesTextBox.Enabled = false;
                    PanelgvEG.Enabled = false;
                    ComentariosTextBox.Enabled = false;
                    AceptarButton.Enabled = false;
                    SalirButton.Text = "Salir";

                    MensajeLabel.Text = "There was successfully. ";
                }
                catch (Exception ex)
                {
                    MensajeLabel.Text = EX.Funciones.Detalle(ex);
                    return;
                }
            }
        }
        protected void gvEG_RowDataBound(object sender, GridViewRowEventArgs e)
        {

            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                //DropDownList ddlCodigoDiaSemDesde = (DropDownList)e.Row.FindControl("ddlCodigoDiaSemDesde");
                //if (ddlCodigoDiaSemDesde != null)
                //{
                //    ddlCodigoDiaSemDesde.DataSource = Entidades.DiasDeLaSemana.Dias.ListaMasSinInformar();
                //    ddlCodigoDiaSemDesde.DataBind();
                //    ddlCodigoDiaSemDesde.SelectedValue = gvEG.DataKeys[e.Row.RowIndex].Values[0].ToString();
                //}
                //DropDownList ddlCodigoDiaSemHasta = (DropDownList)e.Row.FindControl("ddlCodigoDiaSemHasta");
                //if (ddlCodigoDiaSemHasta != null)
                //{
                //    ddlCodigoDiaSemHasta.DataSource = Entidades.DiasDeLaSemana.Dias.ListaMasSinInformar();
                //    ddlCodigoDiaSemHasta.DataBind();
                //    ddlCodigoDiaSemHasta.SelectedValue = gvEG.DataKeys[e.Row.RowIndex].Values[1].ToString();
                //}
            }
            if (e.Row.RowType == DataControlRowType.EmptyDataRow)
            {
                //DropDownList ddlCodigoDiaSemDesde = (DropDownList)e.Row.FindControl("CodigoDiaSemDesdeEMPTY");
                //if (ddlCodigoDiaSemDesde != null)
                //{
                //    ddlCodigoDiaSemDesde.DataSource = Entidades.DiasDeLaSemana.Dias.ListaMasSinInformar();
                //    ddlCodigoDiaSemDesde.DataBind();
                //}
                //DropDownList ddlCodigoDiaSemHasta = (DropDownList)e.Row.FindControl("CodigoDiaSemHastaEMPTY");
                //if (ddlCodigoDiaSemHasta != null)
                //{
                //    ddlCodigoDiaSemHasta.DataSource = Entidades.DiasDeLaSemana.Dias.ListaMasSinInformar();
                //    ddlCodigoDiaSemHasta.DataBind();
                //}
            }
            else if (e.Row.RowType == DataControlRowType.Footer)
            {
                //DropDownList ddlCodigoDiaSemDesde = (DropDownList)e.Row.FindControl("ddlCodigoDiaSemDesde");
                //if (ddlCodigoDiaSemDesde != null)
                //{
                //    ddlCodigoDiaSemDesde.DataSource = Entidades.DiasDeLaSemana.Dias.ListaMasSinInformar();
                //    ddlCodigoDiaSemDesde.DataBind();
                //}
                //DropDownList ddlCodigoDiaSemHasta = (DropDownList)e.Row.FindControl("ddlCodigoDiaSemHasta");
                //if (ddlCodigoDiaSemHasta != null)
                //{
                //    ddlCodigoDiaSemHasta.DataSource = Entidades.DiasDeLaSemana.Dias.ListaMasSinInformar();
                //    ddlCodigoDiaSemHasta.DataBind();
                //}
            }
        }
        protected void gvEG_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                if (e.CommandName.Equals("Insert"))
                {
                    Entidades.HorarioFecha horario = new Entidades.HorarioFecha();
                    horario.FechaDesde = Convert.ToDateTime(((TextBox)gvEG.FooterRow.FindControl("txtHFechaDesde")).Text);
                    horario.FechaHasta = Convert.ToDateTime(((TextBox)gvEG.FooterRow.FindControl("txtHFechaHasta")).Text);
                    horario.HorarioDesde = ((TextBox)gvEG.FooterRow.FindControl("txtHorarioDesde")).Text;
                    horario.HorarioHasta = ((TextBox)gvEG.FooterRow.FindControl("txtHorarioHasta")).Text;
                    //horario.CodigoDiaSemDesde = ((DropDownList)gvEG.FooterRow.FindControl("ddlCodigoDiaSemDesde")).SelectedValue.ToString();
                    //horario.DescrDiaSemDesde = ((DropDownList)gvEG.FooterRow.FindControl("ddlCodigoDiaSemDesde")).SelectedItem.Text.ToString();
                    //horario.CodigoDiaSemHasta = ((DropDownList)gvEG.FooterRow.FindControl("ddlCodigoDiaSemHasta")).SelectedValue.ToString();
                    //horario.DescrDiaSemHasta = ((DropDownList)gvEG.FooterRow.FindControl("ddlCodigoDiaSemHasta")).SelectedItem.Text.ToString();
                    horario.Comentario = ((TextBox)gvEG.FooterRow.FindControl("txtComentario")).Text;
                    horario.Activo = ((CheckBox)gvEG.FooterRow.FindControl("chkActivo")).Checked;

                    ((List<Entidades.HorarioFecha>)ViewState["horarios"]).Add(horario);

                    //Saco de edición la fila que estén modificando
                    if (!gvEG.EditIndex.Equals(-1))
                    {
                        gvEG.EditIndex = -1;
                    }
                    gvEG.DataSource = ViewState["horarios"];
                    gvEG.DataBind();
                }
                else if (e.CommandName.Equals("InsertEMPTY"))
                {
                    Entidades.HorarioFecha horario = new Entidades.HorarioFecha();
                    horario.FechaDesde = Convert.ToDateTime(((TextBox)gvEG.Controls[0].Controls[0].FindControl("txtHFechaDesdeEMPTY")).Text);
                    horario.FechaHasta = Convert.ToDateTime(((TextBox)gvEG.Controls[0].Controls[0].FindControl("txtHFechaHastaEMPTY")).Text);
                    horario.HorarioDesde = ((TextBox)gvEG.Controls[0].Controls[0].FindControl("txtHorarioDesdeEMPTY")).Text;
                    horario.HorarioHasta = ((TextBox)gvEG.Controls[0].Controls[0].FindControl("txtHorarioHastaEMPTY")).Text;
                    //horario.CodigoDiaSemDesde = ((DropDownList)gvEG.Controls[0].Controls[0].FindControl("CodigoDiaSemDesdeEMPTY")).SelectedValue.ToString();
                    //horario.DescrDiaSemDesde = ((DropDownList)gvEG.Controls[0].Controls[0].FindControl("CodigoDiaSemDesdeEMPTY")).SelectedItem.Text.ToString();
                    //horario.CodigoDiaSemHasta = ((DropDownList)gvEG.Controls[0].Controls[0].FindControl("CodigoDiaSemHastaEMPTY")).SelectedValue.ToString();
                    //horario.DescrDiaSemHasta = ((DropDownList)gvEG.Controls[0].Controls[0].FindControl("CodigoDiaSemHastaEMPTY")).SelectedItem.Text.ToString();
                    horario.Comentario = ((TextBox)gvEG.Controls[0].Controls[0].FindControl("txtComentarioEMPTY")).Text;
                    horario.Activo = ((CheckBox)gvEG.Controls[0].Controls[0].FindControl("chkActivoEMPTY")).Checked;
                    
                    ((List<Entidades.HorarioFecha>)ViewState["horarios"]).Add(horario);

                    //Saco de edición la fila que estén modificando
                    if (!gvEG.EditIndex.Equals(-1))
                    {
                        gvEG.EditIndex = -1;
                    }
                    gvEG.DataSource = ViewState["horarios"];
                    gvEG.DataBind();
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Message", "alert('" + ex.Message.ToString().Replace("'", "") + "');", true);
            }
        }
        protected void gvEG_RowEditing(object sender, GridViewEditEventArgs e)
        {
            gvEG.EditIndex = e.NewEditIndex;
            gvEG.DataSource = ViewState["horarios"];
            gvEG.DataBind();
        }
        protected void gvEG_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            gvEG.EditIndex = -1;
            gvEG.DataSource = ViewState["horarios"];
            gvEG.DataBind();
        }
        protected void gvEG_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            try
            {
                List<Entidades.HorarioFecha> horarios = ((List<Entidades.HorarioFecha>)ViewState["horarios"]);
                Entidades.HorarioFecha horario = horarios[e.RowIndex];

                string fechaDesde = ((TextBox)gvEG.Rows[e.RowIndex].FindControl("txtHorarioDesde")).Text;
                string fechaHasta = ((TextBox)gvEG.Rows[e.RowIndex].FindControl("txtHorarioHasta")).Text;
                string horarioDesde = ((TextBox)gvEG.Rows[e.RowIndex].FindControl("txtHorarioDesde")).Text;
                string horarioHasta = ((TextBox)gvEG.Rows[e.RowIndex].FindControl("txtHorarioHasta")).Text;
                //string codigoDiaSemDesde = ((DropDownList)gvEG.Rows[e.RowIndex].FindControl("ddlCodigoDiaSemDesde")).SelectedValue;
                //string descrDiaSemDesde = ((DropDownList)gvEG.Rows[e.RowIndex].FindControl("ddlCodigoDiaSemDesde")).SelectedItem.Text;
                //string codigoDiaSemHasta = ((DropDownList)gvEG.Rows[e.RowIndex].FindControl("ddlCodigoDiaSemHasta")).SelectedValue;
                //string descrDiaSemHasta = ((DropDownList)gvEG.Rows[e.RowIndex].FindControl("ddlCodigoDiaSemHasta")).SelectedItem.Text;
                horario.Comentario = ((TextBox)gvEG.Rows[e.RowIndex].FindControl("txtComentario")).Text;
                horario.Activo = ((CheckBox)gvEG.Rows[e.RowIndex].FindControl("chkActivo")).Checked;
                if (fechaDesde != string.Empty && fechaHasta != string.Empty)
                {
                    horario.FechaDesde = Convert.ToDateTime(fechaDesde);
                    horario.FechaHasta = Convert.ToDateTime(fechaHasta);
                }
                else
                {
                    throw new Exception("You must report the opening hours and closing hours. This can not be empty.");
                }
                if (horarioDesde != string.Empty && horarioHasta != string.Empty)
                {
                    horario.HorarioDesde = horarioDesde;
                    horario.HorarioHasta = horarioHasta;
                }
                else
                {
                    throw new Exception("You must report days of the week. This can not be empty.");
                }
                //if (codigoDiaSemDesde != string.Empty && codigoDiaSemHasta != string.Empty)
                //{
                //    horario.CodigoDiaSemDesde = codigoDiaSemDesde;
                //    horario.CodigoDiaSemHasta = codigoDiaSemHasta;
                //    horario.DescrDiaSemDesde = descrDiaSemDesde;
                //    horario.DescrDiaSemHasta = descrDiaSemHasta;
                //}
                //else
                //{
                //    throw new Exception("Debe informar los dias de la semana. No puede estar vacío.");
                //}
                gvEG.EditIndex = -1;
                gvEG.DataSource = ViewState["horarios"];
                gvEG.DataBind();
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + ex.Message.ToString().Replace("'", "") + "');</SCRIPT>", false);
            }
        }
        protected void gvEG_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                List<Entidades.HorarioFecha> horarios = ((List<Entidades.HorarioFecha>)ViewState["horarios"]);
                Entidades.HorarioFecha horario = horarios[e.RowIndex];
                horarios.Remove(horario);
                //if (horarios.Count.Equals(0))
                //{
                //    Entidades.Horario nuevo = new Entidades.Horario();
                //    horarios.Add(nuevo);
                //}
                gvEG.EditIndex = -1;
                gvEG.DataSource = ViewState["horarios"];
                gvEG.DataBind();
            }
            catch
            {
            }
        }
        protected void gvEG_RowDeleted(object sender, GridViewDeletedEventArgs e)
        {
            if (e.Exception != null)
            {
                ScriptManager.RegisterStartupScript(this, GetType(), "Message", "<SCRIPT LANGUAGE='javascript'>alert('" + e.Exception.Message.ToString().Replace("'", "") + "');</SCRIPT>", false);
                e.ExceptionHandled = true;
            }
        }
    }
}